/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package utiles;

import java.util.Calendar;

/**
 *
 * @author Felipe
 */
public class UtilesCalendar
{
    /**
     * Obtiene la diferencia en dias entre dos calendars.
     * @param desde la fecha desde la cual calcular la diferencia.
     * @param hasta la fecha hasta la cual calcular la diferencia.
     * @return la distancia, en dias, entre las dos fechas.
     */
    public static int diasDiferencia (Calendar desde, Calendar hasta)
    {
        long fechaDesde = desde.getTimeInMillis();
        long fechaHasta = hasta.getTimeInMillis();
        
        long diferencia = fechaHasta - fechaDesde;
        
        return (int) (diferencia / (1000 * 60 * 60 * 24));
    }
    
    /**
     * Configura un calendar con los parametros dados.
     * @param dia el dia de la fecha.
     * @param mes el mes de la fecha.
     * @param year el año de la fecha.
     * @return el calendar configurado.
     */
    public static Calendar setCalendar (int dia, int mes, int year)
    {
        return setCalendar (Calendar.getInstance(), dia, mes, year);
    }
    
    /**
     * Configura un calendar con los parametros dados.
     * @param c el calendar a configurar.
     * @param dia el dia de la fecha.
     * @param mes el mes de la fecha.
     * @param year el año de la fecha.
     * @return 
     */
    public static Calendar setCalendar (Calendar c, int dia, int mes, int year)
    {
        c.set(Calendar.DAY_OF_MONTH, dia);
        c.set(Calendar.MONTH, mes);
        c.set(Calendar.YEAR, year);
        
        return c;
    }
    
    public static void imprimirCalendar (Calendar calendar)
    {
        System.out.println("Fecha: " + calendar.get(Calendar.DAY_OF_MONTH) + "/" + calendar.get(Calendar.MONTH) + "/" + calendar.get(Calendar.YEAR));
    }
    
    public static String getStringCompleto (Calendar fecha)
    {
        return String.format("%02d", fecha.get(Calendar.DAY_OF_MONTH))+"/"+String.format("%02d", (fecha.get(Calendar.MONTH)+1))+"/"+fecha.get(Calendar.YEAR)+" - "+String.format("%02d", fecha.get(Calendar.HOUR_OF_DAY))+":"+String.format("%02d", fecha.get(Calendar.MINUTE));
    }
    
    /**
     * Obtiene un calendar representado como cadena en formato DD/MM/AAAA.
     * @param fecha la fecha a convertir.
     * @return la fecha representada como cadena.
     */
    public static String getString (Calendar fecha)
    {
        return String.format("%02d", fecha.get(Calendar.DAY_OF_MONTH))+"/"+String.format("%02d", (fecha.get(Calendar.MONTH)+1))+"/"+fecha.get(Calendar.YEAR);
    }
    
    public static Calendar construirCalendar (String cadena)
    {
        try
        {
            String[] valores = cadena.split("/");
            int[] valoresInt = new int[3];
            
            for (int i = 0; i < 3; i ++)
                valoresInt[i] = Integer.parseInt(valores[i]);

            for (int x : valoresInt)
                if (x <= 0)
                    return null;
            
            Calendar c = Calendar.getInstance();
            
            c.set(Calendar.DAY_OF_MONTH, valoresInt[0]);
            c.set(Calendar.MONTH, valoresInt[1] - 1);
            c.set(Calendar.YEAR, valoresInt[2]);
            
            return c;
        }
        catch (Exception e)
        {
            return null;
        }
    }
    
    public static boolean esMenor (Calendar nacimiento)
    {
        Calendar c = Calendar.getInstance();
        
        long milis = c.getTimeInMillis();
        long milis2 = nacimiento.getTimeInMillis();
        
        long diff = milis - milis2;
        
        return (diff / 1000 / 60 / 60 / 24 / 365) < 18;
    }
}
